import redis
from flask import Flask
from flask_session import Session
from flask_sqlalchemy import SQLAlchemy
from flask_wtf import CSRFProtect

from config import config

# 创建SQLAlchemy对象
db = SQLAlchemy()
# redis的操作对象
redis_store = None


def create_app(config_name):
    """创建应用对象
    config_name： 传入就配置环境选择
    """

    global redis_store

    app = Flask(__name__)

    # 加载配置信息
    app.config.from_object(config[config_name])

    # 开启了csrf保护
    CSRFProtect(app)

    # 很多的flask的扩展 都需要 先生成对象 再去初始化
    db.init_app(app)

    # 生成StrictRedis对象 用来操作redis数据库
    redis_store = redis.StrictRedis(host=config[config_name].REDIS_HOST, port=config[config_name].REDIS_PORT,
                                    decode_responses=True)

    # 初始化sessino对象 里面会设置保存位置
    Session(app)

    return app
